Mapインターフェース

コレクションフレームワークに属するMapインターフェースはListインターフェースと違い、0から始まるインデックスではなくキーとバリューを一対にして要素を管理します。mapインスタンスの宣言はジェネリックの< >の中にキーとバリューの型をカンマ区切りで指定し、要素の登録はputメソッド、取り出しはgetメソッドで行います。
要素の登録では同じキーの複数登録はできませんが、キーが違えば同じバリューの複数登録は可能です。

要素を連続して取り出すには、keySetメソッドでキーの一覧をSetオブジェクトに取り出し、Setオブジェクトから拡張for文でキーを順次取り出しながら、getメソッドでバリューを取出します。下記HashMapを使ったサンプルの15行目から18行目及び21行目から24行目を参照)

Mapインターフェースの実装の一つがHashMapです。
HashMapはハッシュを使って、要素の保存場所を決定するので、要素の追加・削除・変更という操作が、要素の数に関わらず一定の時間で実行可能です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Map;
import java.util.Set;
import java.util.HashMap;
 
public class HashMapSample {
    public static void main(String[] args) {
 
        Map<Integer, String> map=new HashMap<>( );
        System.out.println(map.size());
        System.out.println("---------------");
        map.put(1, "Bach");
        map.put(10, "Chopin");
        map.put(100, "Anonymous");
         
        Set<Integer> keys = map.keySet();
        for(int key: keys) {
            System.out.println("key:" + key + " value:" + map.get(key));
        }
        System.out.println("---------------");
        map.put(101, "Anonymous");
        keys = map.keySet();
        for(int key: keys) {
            System.out.println("key:" + key + " value:" + map.get(key));
        }
        System.out.println("---------------");
        System.out.println("Map contains key:10 (\"Chopin\"):" + map.containsKey(10));
        map.remove(100, "Anonymous");
        System.out.println(map.size());
        System.out.println(map);
    }
}

実行結果
>java HashMapSample
0
—————
key:1 value:Bach
key:100 value:Anonymous
key:10 value:Chopin
—————
key:1 value:Bach
key:100 value:Anonymous
key:101 value:Anonymous
key:10 value:Chopin
—————
Map contains key:10 (“Chopin”):true
3
{1=Bach, 101=Anonymous, 10=Chopin}

>

また、別の実装としてTreeMapクラスがあります。
基本的な仕様はHashMapと変わりませんが、要素を辞書順にソートして管理します。
実行結果の最後のmap内の要素の呼び出し結果をHashMapのそれと比較してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
 
public class TreeMapSample {
    public static void main(String[] args) {
 
        Map<Integer, String> map=new TreeMap<>( );
        System.out.println(map.size());
        System.out.println("---------------");
        map.put(1, "Bach");
        map.put(10, "Chopin");
        map.put(100, "Anonymous");
         
        Set<Integer> keys = map.keySet();
        for(int key: keys) {
            System.out.println("key:" + key + " value:" + map.get(key));
        }
        System.out.println("---------------");
        map.put(101, "Anonymous");
        keys = map.keySet();
        for(int key: keys) {
            System.out.println("key:" + key + " value:" + map.get(key));
        }
        System.out.println("---------------");
        System.out.println("Map contains key:10 (\"Chopin\"):" + map.containsKey(10));
        map.remove(100, "Anonymous");
        System.out.println(map.size());
        System.out.println(map);
    }
}

実行結果
>java TreeMapSample
0
—————
key:1 value:Bach
key:10 value:Chopin
key:100 value:Anonymous
—————
key:1 value:Bach
key:10 value:Chopin
key:100 value:Anonymous
key:101 value:Anonymous
—————
Map contains key:10 (“Chopin”):true
3
{1=Bach, 10=Chopin, 101=Anonymous}

>

コレクション に戻る